#pragma GCC optimize(2)
#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=9,M=16;
int a[N][N];
int s[N][N];
double f[N][N][N][N][M];
int n;
double X;
int get_sum(int x1,int y1,int x2,int y2)
{
    return s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]+s[x1-1][y1-1];
}

double get(int x1,int y1,int x2,int y2)
{
    double sum=get_sum(x1,y1,x2,y2)-X;
    
    return sum*sum/n;
}

double dfs(int x1,int y1,int x2,int y2,int k)
{
    if(f[x1][y1][x2][y2][k]>=0) return f[x1][y1][x2][y2][k];
    if(k==1) return f[x1][y1][x2][y2][n]=get(x1,y1,x2,y2);
    
    double ans=1e9;
    
    for(int i=x1;i<x2;i++)
    {
        double s1=get(x1,y1,i,y2);
        double s2=get(i+1,y1,x2,y2);

        ans=min(dfs(x1,y1,i,y2,k-1)+s2,ans);
        ans=min(ans,dfs(i+1,y1,x2,y2,k-1)+s1);
    }
    
    for(int i=y1;i<y2;i++)
    {
        double s1=get(x1,y1,x2,i);
        double s2=get(x1,i+1,x2,y2);

        ans=min(dfs(x1,y1,x2,i,k-1)+s2,ans);
        ans=min(ans,dfs(x1,i+1,x2,y2,k-1)+s1);
    }
    
    return f[x1][y1][x2][y2][k]=ans;
}
int main()
{
    cin>>n;
    for(int i=1;i<=8;i++)
        for(int j=1;j<=8;j++) cin>>a[i][j];
    
    for(int i=1;i<=8;i++)
    {
        for(int j=1;j<=8;j++)
        {
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
        }
    }
    
    X=(double)s[8][8]/n;
    memset(f,-1,sizeof(f));
    
    double ans=(double)dfs(1,1,8,8,n);
    
    ans=sqrt(ans);
    
    printf("%.3lf",ans);

	return 0;
}

